import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

/**
 * @author Diego Enriquez 10038
 * Clase que permite mostrar la interfaz grafica del Lisp
 */
public class Grafico extends JPanel{
	private JTextField texto;
	private JLabel resultado;
	private JButton	aceptar;
	private Lisp lisp;
	
	/**
	 * Constructor que inicializa los elementos de la interfaz grafica
	 */
	public Grafico(){
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); //Permite organizar los elementos de forma vertical
		texto = new JTextField();
		texto.setPreferredSize(new Dimension(500,20));
		resultado = new JLabel("");
		resultado.setPreferredSize(new Dimension(500,20));
		aceptar = new JButton("Aceptar");
		aceptar.addActionListener(new AceptarListener());
		lisp = new Lisp();
		revalidar(); //Vuelve a mostrar todo para asegurar que se noten los cambios
	}
	
	/**
	 * Procedimiento que quita todo y lo vueve a agregar para que sea
	 * mas seguro que se noten los cambios
	 */
	private void revalidar(){
		JPanel panel = new JPanel();
		JPanel panel2 = new JPanel();
		removeAll();
		add(texto);
		panel2.add(aceptar);
		panel.add(resultado);
		add(panel);
		add(panel2);
		revalidate();
	}
	
	/**
	 * 
	 * Clase que permite crear listeners para el boton de aceptar
	 */
	private class AceptarListener implements ActionListener{
		
		/**
		 * metodo que permite determinar que va a pasar al ser precionado el boton de aceptar
		 */
		public void actionPerformed(ActionEvent e) {
			String ops = texto.getText();
			
				resultado.setText("El resultado es: " + lisp.interprete(ops));		
			
			revalidar();
		}
		
	}
	
}
